﻿using Onshi.POS.AccesoDatos.Interfaces;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosImpuestos : ServicioDatosBase, IServicioDatosImpuestos
    {
        #region Metodos

        public DataSet Impuestos_DevolverTodos()
        {
            try
            {
                var cm = new SqlCommand("Impuestos_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Impuestos_DevolverPorId(Int32 idImpuesto)
        {
            try
            {
                var cm = new SqlCommand("Impuestos_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdImpuesto", idImpuesto);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Impuestos_Insertar(Byte idTipoImpuesto, String nombre, String observaciones, Decimal valor, Decimal montoMaximo, Decimal montoAplicable)
        {
            try
            {
                var cm = new SqlCommand("Impuestos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdTipoImpuesto", idTipoImpuesto);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Parameters.AddWithValue("@MontoMaximo", montoMaximo);
                cm.Parameters.AddWithValue("@MontoAplicable", montoAplicable);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Impuestos_Modificar(Int32 idImpuesto, Byte idTipoImpuesto, String nombre, String observaciones, Decimal valor, Decimal montoMaximo, Decimal montoAplicable, Boolean estaEliminado)
        {
            try
            {
                var cm = new SqlCommand("Impuestos_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdImpuesto", idImpuesto);
                cm.Parameters.AddWithValue("@IdTipoImpuesto", idTipoImpuesto);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Parameters.AddWithValue("@MontoMaximo", montoMaximo);
                cm.Parameters.AddWithValue("@MontoAplicable", montoAplicable);
                cm.Parameters.AddWithValue("@EstaEliminado", estaEliminado);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
